#include <iostream>
#include <cmath>
#include <string>
#include <stdlib.h>
using namespace std;

template<typename T, unsigned size>
class Tau_int;

namespace tau {
	//Tau Exception Handler
	class Tau_Exception {
	public:
		Tau_Exception () {
			cout << "\"log here\" Tau_Exception" << endl;
		}
	};

	class Exception_SUM : public Tau_Exception {
	public:
		Exception_SUM () {
			cout << "\"log here\" Exception_SUM" << endl;
		}
	};

	class Exception_atoi : public Tau_Exception {
	public:
		Exception_atoi () {
			cout << "\"log here\" Exception_atoi" << endl;
		}
	};

	class Exception_invalid_char : public Exception_atoi {
	public:
		Exception_invalid_char () {
			cout << "\"log here\" Exception_invalid_char" << endl;
		}
	};

	class Exception_char_out_of_base : public Exception_invalid_char {
	public:
		Exception_char_out_of_base () {
			cout << "\"log here\" Exception_char_out_of_base" << endl;
		}
	};

	class Exception_invalid_base : public Exception_atoi {
	public:
		Exception_invalid_base () {
			cout << "\"log here\" Exception_atoi" << endl;
		}
	};

	class Exception_shift : public Tau_Exception {
	public:
		Exception_shift (int shift) {
			cout << "\"log here\" Exception_shift" << endl;
			cout << "\"log here\" warning: negative " << shift << "value passed as parameter to shift Tau_int" << endl;
		}
	};

	class Exception_shift_left : public Exception_shift {
	public:
		Exception_shift_left (int shift) : Exception_shift(shift) {
			cout << "\"log here\" Exception_shift_left" << endl;
		}
	};

	class Exception_shift_right : public Exception_shift {
	public:
		Exception_shift_right (int shift) : Exception_shift(shift) {
			cout << "\"log here\" Exception_shift_right" << endl;
		}
	};


};
